Reordering a Tensor
from csdl_om import Simulatorfrom csdl import Modelimport csdlimport numpy as np
class ExampleTensor(Model):
def define(self):
# Declare tens as an input tensor with shape = (4, 3, 2, 5) tens = self.declare_variable( 'T1', val=np.arange(4 * 3 * 5 * 2).reshape((4, 3, 5, 2)), )
# Compute a new tensor by reordering axes of tens; reordering is # given by 'ijkl->ljki' self.register_output('axes_reordered_tensor', csdl.reorder_axes(tens, 'ijkl->ljki'))
sim = Simulator(ExampleTensor())sim.run()
print('T1', sim['T1'].shape)print(sim['T1'])print('axes_reordered_tensor', sim['axes_reordered_tensor'].shape)print(sim['axes_reordered_tensor'])
[[[[ 0. 1.] [ 2. 3.] [ 4. 5.] [ 6. 7.] [ 8. 9.]]
[[ 10. 11.] [ 12. 13.] [ 14. 15.] [ 16. 17.] [ 18. 19.]]
[[ 20. 21.] [ 22. 23.] [ 24. 25.] [ 26. 27.] [ 28. 29.]]]
[[[ 30. 31.] [ 32. 33.] [ 34. 35.] [ 36. 37.] [ 38. 39.]]
[[ 40. 41.] [ 42. 43.] [ 44. 45.] [ 46. 47.] [ 48. 49.]]
[[ 50. 51.] [ 52. 53.] [ 54. 55.] [ 56. 57.] [ 58. 59.]]]
[[[ 60. 61.] [ 62. 63.] [ 64. 65.] [ 66. 67.] [ 68. 69.]]
[[ 70. 71.] [ 72. 73.] [ 74. 75.] [ 76. 77.] [ 78. 79.]]
[[ 80. 81.] [ 82. 83.] [ 84. 85.] [ 86. 87.] [ 88. 89.]]]
[[[ 90. 91.] [ 92. 93.] [ 94. 95.] [ 96. 97.] [ 98. 99.]]
[[100. 101.] [102. 103.] [104. 105.] [106. 107.] [108. 109.]]
[[110. 111.] [112. 113.] [114. 115.] [116. 117.] [118. 119.]]]]axes_reordered_tensor (2, 3, 5, 4)[[[[ 0. 30. 60. 90.] [ 2. 32. 62. 92.] [ 4. 34. 64. 94.] [ 6. 36. 66. 96.] [ 8. 38. 68. 98.]]
[[ 10. 40. 70. 100.] [ 12. 42. 72. 102.] [ 14. 44. 74. 104.] [ 16. 46. 76. 106.] [ 18. 48. 78. 108.]]
[[ 20. 50. 80. 110.] [ 22. 52. 82. 112.] [ 24. 54. 84. 114.] [ 26. 56. 86. 116.] [ 28. 58. 88. 118.]]]
[[[ 1. 31. 61. 91.] [ 3. 33. 63. 93.] [ 5. 35. 65. 95.] [ 7. 37. 67. 97.] [ 9. 39. 69. 99.]]
[[ 11. 41. 71. 101.] [ 13. 43. 73. 103.] [ 15. 45. 75. 105.] [ 17. 47. 77. 107.] [ 19. 49. 79. 109.]]
[[ 21. 51. 81. 111.] [ 23. 53. 83. 113.] [ 25. 55. 85. 115.] [ 27. 57. 87. 117.] [ 29. 59. 89. 119.]]]]